package com.molin.OOP.polymorphic;

/*
* 多态的前提和体现
    有继承/实现关系
    有方法重写
    有父类引用指向子类对象*/
/*
* 成员变量：编译看左边（父类），运行看左边（父类）
* 成员方法：编译看左边（父类），运行看右边（子类）*/

public class Test1 {
    // 父类引用指向子类对象
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.eat();
        System.out.println(animal.age);
        if(animal instanceof Cat){
            Cat cat=(Cat)animal;
            cat.method();
        }
        Animal animal1=new Dog();
        animal1.eat();
    }

}

class Animal {
    int age=10;
    public void eat() {
        System.out.println("动物要吃食物");
    }
}

//继承/实现关系
class Cat extends Animal {
    //    方法的重写
    int age=20;
    @Override
    public void eat() {
        System.out.println(
                "猫要吃鱼"
        );
    }
    void method(){
        System.out.println("子类特有方法");
    }
}

class Dog extends Animal {
    //    方法的重写
    @Override
    public void eat() {
        System.out.println(
                "狗要吃肉"
        );

    }
}